package ar.edu.utn.frsf.tpae.a2014.g03.presentation.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.SelectEvent;

import ar.edu.utn.frsf.tpae.a2014.g03.enums.EstadoPedidoEnum;
import ar.edu.utn.frsf.tpae.a2014.g03.persistence.model.Administrativo;
import ar.edu.utn.frsf.tpae.a2014.g03.persistence.model.Pedido;
import ar.edu.utn.frsf.tpae.a2014.g03.persistence.model.Transportista;
import ar.edu.utn.frsf.tpae.a2014.g03.presentation.util.ServiceLocator;

@ManagedBean(name = "asignarTransportistaBean")
@SessionScoped
public class AsignarTransportistaBean implements Serializable {

	private static final long serialVersionUID = -2924699601028973688L;
	@ManagedProperty(value = "#{usuarioBean.usuario}")
	private Administrativo administrativo;
	private Map<Integer, Transportista> mapTransportista;
	private Pedido selectedPedido;
	private Integer selectedTransportista;

	public String viewDialodAsignarTransportista(Integer idPedido) {
		System.out.println("viewDialodAsignarTransportista....");
		/*
		 * Map<String,Object> options = new HashMap<String, Object>();
		 * options.put("modal", true); options.put("draggable", false);
		 * options.put("resizable", false); selectedPedido= pedido;
		 * RequestContext
		 * .getCurrentInstance().openDialog("asignarTransportista.xhtml",
		 * options, null);
		 */

			selectedPedido = ServiceLocator.getPedidoService().findById(idPedido);
		;
		return "/asignarTransp.xhtml";
	}

	public String asignarTranportista() {
		try {
			System.out.println("asignarTranportista....");
			EstadoPedidoEnum estado = EstadoPedidoEnum.A_RETIRAR;
			selectedPedido.setAdministrativo(administrativo);

			selectedPedido.setTransportista(mapTransportista
					.get(selectedTransportista));
			selectedPedido = ServiceLocator.getPedidoService().update(
					selectedPedido, estado, "");
			return "/consultaPedidoSinAsignar.xhtml";

		} catch (RuntimeException e) {
			System.out.println("Exception asignarTranportista "
					+ e.getLocalizedMessage());
		}
		return "consultaPedidoSinAsignar.xhtml";
	}

	public List<Transportista> getListaTransportista() {
		List<Transportista> listaTrans = new ArrayList<Transportista>();
		try {
			System.out.println("getListaTransportista....");
			mapTransportista = new HashMap<Integer, Transportista>();
			listaTrans = ServiceLocator.getTransportistaService()
					.findAllTransportistaService();
			for (Transportista t : listaTrans) {
				mapTransportista.put(t.getId(), t);
			}
		} catch (RuntimeException e) {
			System.out.println("Exception getListaTransportista "
					+ e.getLocalizedMessage());
		}

		return listaTrans;
	}

	public void handleReturn(SelectEvent event) {
		selectedPedido = (Pedido) event.getObject();

	}

	public Administrativo getAdministrativo() {
		return administrativo;
	}

	public void setAdministrativo(Administrativo administrativo) {
		this.administrativo = administrativo;
	}

	public Pedido getSelectedPedido() {
		return selectedPedido;
	}

	public void setSelectedPedido(Pedido selectedPedido) {
		this.selectedPedido = selectedPedido;
	}

	public Integer getSelectedTransportista() {
		return selectedTransportista;
	}

	public void setSelectedTransportista(Integer selectedTransportista) {
		this.selectedTransportista = selectedTransportista;
	}

	public Map<Integer, Transportista> getMapTransportista() {
		return mapTransportista;
	}

	public void setMapTransportista(Map<Integer, Transportista> mapTransportista) {
		this.mapTransportista = mapTransportista;
	}

}
